FROM php:7.4.8-fpm
LABEL maintainer="Amumu <amumu-t@qq.com>"
ARG LARADOCK_PHP_VERSION=7.4
ENV DEBIAN_FRONTEND noninteractive

# 使用国内镜像地址
RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list && \
    sed -i 's/security.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list && \
    sed -i 's/security-cdn.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list

# 更新新的依赖
RUN set -xe; apt-get update -yqq && pecl channel-update pecl.php.net && apt-get install -yqq apt-utils libzip-dev zip unzip && docker-php-ext-configure zip && docker-php-ext-install zip && php -m | grep -q 'zip'

###########################################################################
# BZ2:
###########################################################################

RUN apt-get -y install libbz2-dev
RUN docker-php-ext-install bz2

###########################################################################
# GMP (GNU Multiple Precision):
###########################################################################

RUN apt-get install -y libgmp-dev &&  docker-php-ext-install gmp

###########################################################################
# SSH2:
###########################################################################

RUN  apt-get -y install libssh2-1-dev && pecl install -a ssh2-1.2 &&  docker-php-ext-enable ssh2

###########################################################################
# libfaketime:
###########################################################################

USER root

RUN apt-get install -y libfaketime

###########################################################################
# SOAP:
###########################################################################

RUN rm /etc/apt/preferences.d/no-debian-php && apt-get -y install libxml2-dev php-soap && docker-php-ext-install soap


###########################################################################
# XSL:
###########################################################################

RUN apt-get -y install libxslt-dev && docker-php-ext-install xsl


###########################################################################
# pcov:
###########################################################################

USER root
RUN pecl install pcov && docker-php-ext-enable pcov

###########################################################################
# Phpdbg:
###########################################################################

RUN apt-get install -y --force-yes php${LARADOCK_PHP_VERSION}-phpdbg

###########################################################################
# Blackfire:
###########################################################################

RUN version=$(php -r "echo PHP_MAJOR_VERSION.PHP_MINOR_VERSION;") \
    && curl -A "Docker" -o /tmp/blackfire-probe.tar.gz -D - -L -s https://blackfire.io/api/v1/releases/probe/php/linux/amd64/$version \
    && tar zxpf /tmp/blackfire-probe.tar.gz -C /tmp \
    && mv /tmp/blackfire-*.so $(php -r "echo ini_get('extension_dir');")/blackfire.so \
    && printf "extension=blackfire.so\nblackfire.agent_socket=tcp://blackfire:8707\n" > $PHP_INI_DIR/conf.d/blackfire.ini

###########################################################################
# PHP REDIS EXTENSION
###########################################################################

RUN pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis

###########################################################################
# Swoole EXTENSION
###########################################################################

RUN pecl install swoole &&  docker-php-ext-enable swoole && php -m | grep -q 'swoole'

###########################################################################
# MongoDB:
###########################################################################

RUN  pecl install mongodb && docker-php-ext-enable mongodb


###########################################################################
# AMQP:
###########################################################################

RUN apt-get -y install cmake && \
    curl -L -o /tmp/rabbitmq-c.tar.gz https://github.com/alanxz/rabbitmq-c/archive/master.tar.gz && \
    mkdir -p rabbitmq-c && \
    tar -C rabbitmq-c -zxvf /tmp/rabbitmq-c.tar.gz --strip 1 && \
    cd rabbitmq-c/ && \
    mkdir _build && cd _build/ && \
    cmake .. && \
    cmake --build . --target install && \
    pecl install amqp && \
    docker-php-ext-enable amqp && \
    docker-php-ext-install sockets

###########################################################################
# pcntl
###########################################################################

RUN docker-php-ext-install pcntl

###########################################################################
# bcmath:
###########################################################################

RUN docker-php-ext-install bcmath

###########################################################################
# PHP Memcached:
###########################################################################

RUN pecl install memcached && docker-php-ext-enable memcached

###########################################################################
# Exif:
###########################################################################

RUN docker-php-ext-install exif

###########################################################################
# PHP OCI8:
###########################################################################

ENV LD_LIBRARY_PATH="/opt/oracle/instantclient_12_1"
ENV OCI_HOME="/opt/oracle/instantclient_12_1"
ENV OCI_LIB_DIR="/opt/oracle/instantclient_12_1"
ENV OCI_INCLUDE_DIR="/opt/oracle/instantclient_12_1/sdk/include"
ENV OCI_VERSION=12

RUN apt-get update && apt-get install --no-install-recommends -y wget \
    && mkdir /opt/oracle && cd /opt/oracle \
    && wget https://github.com/diogomascarenha/oracle-instantclient/raw/master/instantclient-basic-linux.x64-12.1.0.2.0.zip \
    && wget https://github.com/diogomascarenha/oracle-instantclient/raw/master/instantclient-sdk-linux.x64-12.1.0.2.0.zip \
    && unzip /opt/oracle/instantclient-basic-linux.x64-12.1.0.2.0.zip -d /opt/oracle \
    && unzip /opt/oracle/instantclient-sdk-linux.x64-12.1.0.2.0.zip -d /opt/oracle \
    && ln -s /opt/oracle/instantclient_12_1/libclntsh.so.12.1 /opt/oracle/instantclient_12_1/libclntsh.so \
    && ln -s /opt/oracle/instantclient_12_1/libclntshcore.so.12.1 /opt/oracle/instantclient_12_1/libclntshcore.so \
    && ln -s /opt/oracle/instantclient_12_1/libocci.so.12.1 /opt/oracle/instantclient_12_1/libocci.so \
    && rm -rf /opt/oracle/*.zip \
    && apt-get update && apt-get install --no-install-recommends -y libaio-dev freetds-dev \
    && echo 'instantclient,/opt/oracle/instantclient_12_1/' | pecl install oci8 \
    && docker-php-ext-configure pdo_oci --with-pdo-oci=instantclient,/opt/oracle/instantclient_12_1,12.1 \
    && docker-php-ext-configure pdo_dblib --with-libdir=/lib/x86_64-linux-gnu \
    && docker-php-ext-install pdo_oci \
    && docker-php-ext-enable oci8

###########################################################################
# IonCube Loader:
###########################################################################

RUN curl -L -o /tmp/ioncube_loaders_lin_x86-64.tar.gz https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz \
    && tar zxpf /tmp/ioncube_loaders_lin_x86-64.tar.gz -C /tmp \
    && mv /tmp/ioncube/ioncube_loader_lin_${LARADOCK_PHP_VERSION}.so $(php -r "echo ini_get('extension_dir');")/ioncube_loader.so \
    && printf "zend_extension=ioncube_loader.so\n" > $PHP_INI_DIR/conf.d/0ioncube.ini \
    && rm -rf /tmp/ioncube*

###########################################################################
# Opcache:
###########################################################################

RUN docker-php-ext-install opcache

# Copy opcache configration
COPY opcache.ini /usr/local/etc/php/conf.d/opcache.ini

###########################################################################
# Mysqli Modifications:
###########################################################################

RUN docker-php-ext-install mysqli


###########################################################################
# Human Language and Character Encoding Support:
###########################################################################

RUN apt-get install -y zlib1g-dev libicu-dev g++ && docker-php-ext-configure intl && docker-php-ext-install intl

###########################################################################
# GHOSTSCRIPT:
###########################################################################

RUN apt-get install -y poppler-utils ghostscript

###########################################################################
# LDAP:
###########################################################################

RUN apt-get install -y libldap2-dev && \
    docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ && \
    docker-php-ext-install ldap

###########################################################################
# SQL SERVER:
###########################################################################
RUN set -eux; \
      apt-get install -y apt-transport-https gnupg \
      && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
      && curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list \
      && apt-get update -yqq \
      && ACCEPT_EULA=Y apt-get install -y unixodbc unixodbc-dev libgss3 odbcinst msodbcsql17 locales \
      && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \
      && ln -sfn /etc/locale.alias /usr/share/locale/locale.alias \
      && locale-gen \
      && pecl install pdo_sqlsrv sqlsrv \
      && docker-php-ext-enable pdo_sqlsrv sqlsrv \
      && php -m | grep -q 'pdo_sqlsrv' \
      && php -m | grep -q 'sqlsrv'


###########################################################################
# Image optimizers:
###########################################################################

USER root
RUN apt-get install -y jpegoptim optipng pngquant gifsicle


###########################################################################
# ImageMagick:
###########################################################################

USER root
RUN apt-get install -y libmagickwand-dev imagemagick && pecl install imagick && docker-php-ext-enable imagick

###########################################################################
# SMB:
###########################################################################

RUN apt-get install -y smbclient php-smbclient coreutils

###########################################################################
# IMAP:
###########################################################################

RUN apt-get install -y libc-client-dev libkrb5-dev && \
    docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \
    docker-php-ext-install imap

###########################################################################
# Calendar:
###########################################################################

USER root

RUN docker-php-ext-configure calendar && docker-php-ext-install calendar

###########################################################################
# APCU:
###########################################################################

RUN pecl install apcu && docker-php-ext-enable apcu

###########################################################################
# YAML:
###########################################################################

USER root

RUN  pecl install yaml && docker-php-ext-enable yaml

###########################################################################
# RDKAFKA:
###########################################################################

RUN apt-get install -y librdkafka-dev &&  pecl install rdkafka && docker-php-ext-enable rdkafka

###########################################################################
# GETTEXT:
###########################################################################

RUN apt-get install -y zlib1g-dev libicu-dev g++ libpq-dev libssl-dev gettext && docker-php-ext-install gettext

###########################################################################
# Install additional locales:
###########################################################################

ARG ADDITIONAL_LOCALES

RUN apt-get install -y locales \
    && echo '' >> /usr/share/locale/locale.alias \
    && temp="${ADDITIONAL_LOCALES%\"}" \
    && temp="${temp#\"}" \
    && for i in ${temp}; do sed -i "/$i/s/^#//g" /etc/locale.gen; done \
    && locale-gen

###########################################################################
# MySQL Client:
###########################################################################

USER root
RUN apt-get -y install default-mysql-client

###########################################################################
# ping:
###########################################################################

USER root
RUN apt-get -y install inetutils-ping

###########################################################################
# sshpass:
###########################################################################

USER root
RUN apt-get -y install sshpass

###########################################################################
# FFMPEG:
###########################################################################

USER root

RUN apt-get -y install ffmpeg

#####################################
# wkhtmltopdf:
#####################################

USER root

RUN apt-get install -y libxrender1 libfontconfig1 libx11-dev libjpeg62 libxtst6 wget \
    && wget https://github.com/h4cc/wkhtmltopdf-amd64/blob/master/bin/wkhtmltopdf-amd64?raw=true -O /usr/local/bin/wkhtmltopdf \
    && chmod +x /usr/local/bin/wkhtmltopdf

###########################################################################
# CacheTool:
###########################################################################

# curl http://gordalina.github.io/cachetool/downloads/cachetool-3.2.1.phar -o cachetool.phar;

RUN curl -sO http://gordalina.github.io/cachetool/downloads/cachetool.phar; \
    && chmod +x cachetool.phar && mv cachetool.phar /usr/local/bin/cachetool

###########################################################################
# GD:
###########################################################################
RUN apt-get update && apt-get install -y libfreetype6-dev  libjpeg62-turbo-dev libpng-dev  && \
    docker-php-ext-configure gd \
    --with-php-config=/usr/local/bin/php-config \
    --with-freetype=/usr/include/freetype \
    --with-jpeg=/usr/include \
    && docker-php-ext-install gd && docker-php-ext-enable gd

###########################################################################
# PDO:
###########################################################################
RUN docker-php-ext-install PDO
RUN docker-php-ext-install pdo_mysql


###########################################################################
# msgpack
###########################################################################

RUN pecl install msgpack && docker-php-ext-enable msgpack

###########################################################################
# 检查 PHP 版本:
###########################################################################

RUN set -xe; php -v | head -n 1 | grep -q "PHP ${LARADOCK_PHP_VERSION}."

#
#--------------------------------------------------------------------------
# 添加laravel配置
#--------------------------------------------------------------------------
#

COPY laravel.ini /usr/local/etc/php/conf.d
COPY xlaravel.pool.conf /usr/local/etc/php-fpm.d/

USER root

# 删除已经安装的包
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && rm /var/log/lastlog /var/log/faillog

ARG PUID=1000
ENV PUID ${PUID}
ARG PGID=1000
ENV PGID ${PGID}

RUN groupmod -o -g ${PGID} www-data && \
    usermod -o -u ${PUID} -g www-data www-data

RUN echo "/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1" > /etc/ld.so.preload

ARG LOCALE=POSIX
ENV LC_ALL ${LOCALE}

WORKDIR /var/www

CMD ["php-fpm"]

EXPOSE 9000
